package controller;

import java.util.ArrayList;
import java.util.List;

import model.Factura;
import beans.FacturaBean;
import dao.HibernateFacturaDAO;
import dto.FacturaDTO;

public class AdministradorFactura {
	private static AdministradorFactura instancia;
	
	private AdministradorFactura(){
		
	}
	
	public static AdministradorFactura getInstancia(){
		if(instancia==null){
			instancia=new AdministradorFactura();
		}
		return instancia;
	}

	public List<FacturaBean> fromModelToBean(List<Factura> facturas) {
		List<FacturaBean> facturasBean=new ArrayList<FacturaBean>();
		for (Factura factura : facturas) {
			facturasBean.add(fromModelTOBean(factura));
		}
		return facturasBean;
	}

	public FacturaBean fromModelTOBean(Factura factura) {
		FacturaBean facturaBean=null;
		if(factura!=null){
		facturaBean=new FacturaBean();
		facturaBean.setFecha(factura.getFecha());
		facturaBean.setNumero(factura.getNumero());
		facturaBean.setTotal(factura.getTotal());
		facturaBean.setVenta(AdministradorVenta.getInstancia().fromModelTOBean(factura.getVenta()));
		facturaBean.setItems(AdministradorItemFactura.getInstancia().fromModelTOBean(factura.getItems()));
		}
		return facturaBean;
	}

	public List<Factura> fromDTOTOModel(List<FacturaDTO> facturasDTO) {
		List<Factura> facturas=new ArrayList<Factura>();
		for (FacturaDTO facturaDTO : facturasDTO) {
			facturas.add(fromDTOTOModel(facturaDTO));
		}
		return facturas;
	}
	public Factura fromDTOTOModel(FacturaDTO facturaDTO) {
		Factura factura=null;
		if(facturaDTO!=null){
		factura=new Factura();
		factura.setFecha(facturaDTO.getFecha());
		factura.setNumero(facturaDTO.getNumero());
		factura.setTotal(facturaDTO.getTotal());
		factura.setVenta(AdministradorVenta.getInstancia().fromDTOTOModel(facturaDTO.getVenta()));
		factura.setItems(AdministradorItemFactura.getInstancia().fromDTOTOModel(facturaDTO.getItems()));
		}
		return factura;
	}
	
	public List<FacturaDTO> fromModelTODTO(List<Factura> facturas) {
		List<FacturaDTO> facturasDTO=new ArrayList<FacturaDTO>();
		for (Factura factura : facturas) {
			facturasDTO.add(fromModelTODTO(factura));
		}
		return facturasDTO;
	}
	public FacturaDTO fromModelTODTO(Factura factura) {
		FacturaDTO facturaDTO=null;
		if(factura!=null){
			facturaDTO=new FacturaDTO();
			facturaDTO.setFecha(factura.getFecha());
			facturaDTO.setNumero(factura.getNumero());
			facturaDTO.setTotal(factura.getTotal());
			facturaDTO.setVenta(AdministradorVenta.getInstancia().fromModelTODTO(factura.getVenta()));
			facturaDTO.setItems(AdministradorItemFactura.getInstancia().fromModelTODTO(factura.getItems()));
		}
		return facturaDTO;
	}

	public List<Factura> fromBeanTOModel(List<FacturaBean> facturasBean) {
		List<Factura> facturas=new ArrayList<Factura>();
		for (FacturaBean facturaBean : facturasBean) {
			facturas.add(fromBeanTOModel(facturaBean));
		}
		return facturas;
	}

	public Factura fromBeanTOModel(FacturaBean facturaBean) {
		Factura factura=null;
		if(facturaBean!=null){
		factura=new Factura();
		factura.setFecha(facturaBean.getFecha());
		factura.setNumero(facturaBean.getNumero());
		factura.setTotal(facturaBean.getTotal());
		factura.setVenta(AdministradorVenta.getInstancia().fromBeanTOModel(facturaBean.getVenta()));
		factura.setItems(AdministradorItemFactura.getInstancia().fromBeanTOModel(facturaBean.getItems()));
		}
		return factura;
	}

	public void grabarFactura(Factura factura) {
		FacturaBean fb=fromModelTOBean(factura);
		HibernateFacturaDAO.getInstancia().grabarFactura(fb);
		
	}
	
	public Factura buscarFactura(Factura f){
		FacturaBean fb=fromModelTOBean(f);
		fb=HibernateFacturaDAO.getInstancia().buscarFactura(fb);
		return fromBeanTOModel(fb);
	}
	
	
}
